/**
 * Copyright 2006 gworks.com.au
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License. (http://www.apache.org/licenses/LICENSE-2.0)
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed 
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for 
 * the specific language governing permissions and limitations under the License.
 *
 * <dhamma-message src="Atisha (11th century Tibetan Buddhist master)">
 *  The greatest achievement is selflessness. The greatest worth is self-mastery.
 *  The greatest quality is seeking to serve others. The greatest precept is continual awareness.
 *  The greatest medicine is the emptiness of everything. The greatest action is not conforming with the worlds ways.
 *  The greatest magic is transmuting the passions. The greatest generosity is non-attachment.
 *  The greatest goodness is a peaceful mind. The greatest patience is humility.
 *  The greatest effort is not concerned with results. The greatest meditation is a mind that lets go.
 *  The greatest wisdom is seeing through appearances. 
 * </dhamma-message>
 * 
 * @author Ashin Wimalajeewa (ash)
 */
package org.javaongems.win.client;

import java.util.HashMap;

import org.javaongems.std.client.DivPanel;

import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.MouseListener;
import com.google.gwt.user.client.ui.Widget;

public class OutlookBarItem extends Composite {
	final static public double ZOOM = 1.2;
	final static public int DIM = 60;
	
	private Label label;
	private Image image;
	private DivPanel verticalPanel;
	private HashMap cargo = new HashMap();
	
	private OutlookBarList owner;
	
	public OutlookBarItem() {
		verticalPanel = new DivPanel();
		initWidget(verticalPanel);
		verticalPanel.setStyleName("winforms-OutlookBarItem");
		sinkEvents(Event.ONCLICK);
		
		image = new Image();
		verticalPanel.add(image);
		image.setStyleName("winforms-OutlookBarItem-img");
		image.addMouseListener(new MouseListener() {
			public void onMouseDown(Widget sender, int x, int y) {
			}
			public void onMouseEnter(Widget sender) {
				zoomOnImage();
				if (owner != null)
					owner.onItemHoverEnter(OutlookBarItem.this);
			}
			public void onMouseLeave(Widget sender) {
				zoomOutOnImage();
				if (owner != null)
					owner.onItemHoverLeave(OutlookBarItem.this);
			}
			public void onMouseMove(Widget sender, int x, int y) {
			}
			public void onMouseUp(Widget sender, int x, int y) {
			}
		});

		label = new Label("");
		verticalPanel.add(label);
		label.setStyleName("winforms-OutlookBarItem-lbl");
	}
	
	public void onBrowserEvent(Event event) {
		switch (DOM.eventGetType(event)) {
		case Event.ONCLICK: {
			if (owner != null)
				owner.onItemSelected(OutlookBarItem.this);
			break;
		}
		default:
			super.onBrowserEvent(event);
		}
	}
	
	public void setItem(String lbl, String imgUrl) {
		image.setTitle(lbl);
		image.setUrl(imgUrl);
		label.setText(lbl);
	}
	
	public void setItem(String lbl, String imgUrl, String desc) {
		setItem(lbl, imgUrl);
		image.setTitle(desc);
	}

	public HashMap getCargo() {
		return cargo;
	}
	
	protected void setOwner(OutlookBarList ownr) {
		owner = ownr;
	}
	
	protected void onAttach() {
		super.onAttach();
		DOM.setEventListener(getElement(), this);	// reset it b/c it was stolen
	}

	private void zoomOnImage() {
		int sz = (int)(DIM * ZOOM);
		image.setPixelSize(sz , sz);
	}
	
	private void zoomOutOnImage() {
		image.setPixelSize(DIM, DIM);	
	}
}
